/**
 * 最后一个单词的长度
 *
 * 给你一个字符串 s，由若干单词组成，单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。
 * 单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
 *
 * 示例 1：
 * 输入：s = "Hello World"
 * 输出：5
 * 解释：最后一个单词是“World”，长度为 5。
 *
 * 示例 2：
 * 输入：s = "   fly me   to   the moon  "
 * 输出：4
 * 解释：最后一个单词是“moon”，长度为 4。
 *
 * 示例 3：
 * 输入：s = "luffy is still joyboy"
 * 输出：6
 * 解释：最后一个单词是长度为 6 的“joyboy”。
 *
 * 提示：
 * 1 <= s.length <= 104
 * s 仅有英文字母和空格 ' ' 组成
 * s 中至少存在一个单词
 */

/**
 * 1. 分割字符串, 我们将原来的字符串按照 " "进行分开, 其中的
 * 最后一个字符就是我们要求的字符串, 求得他的长度即可
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(n)
 *
 * 2. 反向遍历
 * 时间复杂度 : O(n)
 * 空间复杂度 : O(1)
 */

public class Main {

    // *****************************************************
    // 1. 分割字符串
    public int lengthOfLastWord1(String s) {

        // 按照 " " 进行字符串分割
        String[] ss = s.split(" ");

        // 最后一个字符串
        String str = ss[ss.length - 1];

        // 求得他的长度
        return str.length();
    }

    // ***************************************************
    // 反向遍历
    public int lengthOfLastWord(String s) {

        // 字符 s 的长度
        int n = s.length();

        // 排除结尾的 " "
        while (s.charAt(n - 1) == ' ') {
            n--;
        }

        // 记录第一个出现在结尾的 " " 的位置
        int i = 0;

        // 反向遍历
        for (i = n - 1; i >= 0; i--) {

            // 要是为 ' ', 就结束
            if (s.charAt(i) == ' ') {
                break;
            }
        }

        // 返回长度
        return n - i - 1;
    }
}